\chapter{Simulador de rede}
\label{cap:simulador}

%O que é?
O simulador de rede (versão 2)~\cite{ns2}, mais conhecido por NS2, é uma ferramenta de simulação que se baseia em evento discreto.

%Como é ?
Simulador ns2 é composto principalmente por duas linguagens de programação: C++ e OTcl (TCL orientado a objeto) \cite{teerawat_book}. Nas
linhas que se seguem apresentaremos arquitetura básica e estrutura de diretórios de ns2.

\section{Revisão de conceito}
De um lado, simulações detalhadas de protocolos requerem que uma linguagem de programação possa eficientemente manipular \textit{bytes},
cabeçalhos de pacotes, e implementar algoritmos que funcionam sobre um grande conjunto de dados. Essas tarefas requerem eficiência em
tempo de execução. Por outro lado, uma grande parte de pesquisa em redes envolve configurações, diferentes alterações de parâmetros e
cenários, sem a necessidade de re-compilar a implementação de um protocolo. Para essas situações é importante a eficiência em tempo
de alteração de parâmetros e cenários. Para solucionar esses problemas ns2 usa duas linguagens de programação, a saber:
\begin{itemize}
 \item C++ é eficiente quanto ao tempo de execução e nem tanto quanto as alterações para recompilação.
 \item OTcl é ineficiente quanto a execução, mas eficiente quanto as alterações de cenários para simulação.
\end{itemize}

Depois de simulações, NS2 gera resultado de simulação (em texto) e (animação). Para interpretar esses resultados graficamente e interativamente,
ferramentas como NAM (animador de rede) e \textit{Xgraph} são usados. Para analisar um comportamento de rede em particular, usuários podem extrair
um subconjunto relevante de dados de texto e transformá-lo em uma apresentação mais concisa.  
\section{Estrutura do diretório ns2}
\begin{figure}[!hbtp]
\centering
\includegraphics[scale=0.3]{ns2_directory_structure.pdf}
\caption{Estrutura principal do NS2}
\label{fig:estr_dir}
\end{figure}

Na figura~\ref{fig:estr_dir} apresentamos a estrutura principal do diretório do ns2 (versão 2-35) após a instalação. No diretório 
\textbf{ns-2.35} encontram-se todos os módulos necessários para executar simulações, no \textbf{tcltc-1.20} estão as classes que permitem
objetos e variáveis aparecerem em ambas as linguagens (c++ e OTcl); no diretório \textbf{\textit{common}} colocam-se os arquivos que permitem encaminhamento de pacotes
criados para um novo protocolo ou para um protocolo já existente.
  
Após instalação do ns2, usuário tem a sua disposição alguns protocolos de roteamento pré-instalados (por exemplo, AODV~\cite{rehmani}). O usuário pode altera
esses protocolos ou adicionar um novo. O Protoname~\cite{protoname} é uma boa referência para aprender como adicionar um novo protocolo.
